One type of prior art nonvolatile writeable memory is a flash device. A typical flash device has the same array configuration as a standard Electrically Programmable Read-Only Memory ("EPROM") and can be programmed in a similar fashion as an EPROM. Once programmed, either the entire contents of the flash device or a block of the flash device can be erased by electrical erasure in one relatively rapid operation. An erasing voltage is made available to the sources of all the cells in the flash device or in one block of the flash device. This results in a full array erasure or a block erasure. The flash device or the erased block of the flash device may then be reprogrammed with new data.
Flash devices may be read, programmed (or written), and erased. For a prior art flash device, a program operation to write a byte of data typically takes on the order of 10 microseconds. Because, however, there is some margin required for guaranteeing that the program operation has properly completed, a maximum program time is specified by the flash device manufacturer. Thus, while the typical program operation may take 10 microseconds, the system may need to wait a maximum program operation time of 100 microseconds in order to guarantee that the program operation performed correctly.
Similarly, for a prior art flash device, an erase operation may take from 300-600 milliseconds in order to erase a 8 kilobyte block of data. However, the flash device may require up to a maximum erase operation time of 3 seconds in order to guarantee that the erase operation of the entire block of data has performed correctly.
Because the erase operation has such a long latency time, a prior art flash device includes an erase suspend command. When an erase suspend command is written to the flash device, the flash device suspends the erase operation that is being performed. Other operations may then be performed on the flash device. Subsequently, when an erase resume command is written to the flash device, the flash device resumes the erase operation from where it was suspended. An implementation of the erase suspend circuitry is described in U.S. Pat. No. 5,355,464, entitled "Circuitry And Method For Suspending The Automated Erasure Of A Non-Volatile Semiconductor Memory," by Fandrich et al., and issued to the common assignee of this application.
FIG. 1 shows a prior art representation of a system comprising a processor 100, a volatile memory 102, and a flash device 104 coupled together via a bus 108. The volatile memory 102 and the flash device 104, however, could be coupled to the processor 100, via separate buses. The flash device includes a memory array for storing both code and data, wherein the code is executable by the processor.
A problem occurs in this configuration when an interrupt causes the processor 100 to autovector, i.e., automatically vector execution in response to the interrupt, to an interrupt handler located within the flash device or normal code execution attempts to execute from the flash. A typical flash device has at least two modes--a read mode and a status mode in addition to other modes. In one prior art flash device, the flash device transitions into status mode automatically when a program or an erase operation is performed. The flash device remains in status mode until the flash device finishes its non-read operation. If a read is performed during this time, status of the flash device is returned indicating whether the non-read operation has completed. In order to subsequently read data (or code) from the flash device, the flash device is changed back to its read mode by writing to a register within the flash device. Thus, if an interrupt causes the processor to read from the flash device while the flash device is still in status mode, the processor will not read the code that it is expecting--it will instead read status. (In the following discussion, "code" is used to denote bits which are executable by a processor, and "data" is used to denote bits which are not executable by a processor.)
One solution is to shadow, or copy, the code from the flash device to the volatile memory, which is typically either dynamic random access memory (DRAM) or static random access memory (SRAM). After the code is shadowed in the volatile memory, if the flash device is performing a program operation and the processor generates a code fetch request due to an interrupt, for example, then the processor can satisfy the code fetch request by reading the requested code from the volatile memory 102. The processor does not need to wait for the flash device 104 to finish its program operation in order to perform the code fetch.
This scheme, however, may be expensive if the size of the code stored in the flash device is large, since the DRAM/SRAM would need to be large enough to store the entire code block in order to overcome the program operation latency. This scheme also requires the microprocessor to have a capability to "re-vector" its interrupts to RAM. Most microprocessors do not have this capability.
FIG. 2 shows an example of a prior art system which utilizes a fixed hardware partition 110 within the flash device 104 to separate the code from the data. Extra circuitry is added to the flash device to allow only a data section to enter status mode while a code section remains in read mode. Atypical approach is to partition the memory on a block boundary and then duplicate memory array row and column decoders, and charge pump circuits. The duplicate circuitry is needed to segment the standard memory array into separate physical partitions which can be sensed separately. Thus, when the data partition status is busy (e.g., array cells are being programmed or erased), the code partition has row/column decode circuitry available for reading.
However, the extra circuitry is expensive and increases the die size of the flash device. Additionally, the fixed sizes of the data section and the code section created by the hardware partition 110 restrict the flexibility of usage of the flash device.